﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Database;

namespace Fabrica10.Negocios
{
    public class GerenciamentoFuncionarios
    {

        //Cadastro do médico, TIPO 0
        public Funcionario CadastrarMedico(int IdDepartamento, string Nome, string CPF, string Endereco, string Cidade, string Estado, string Telefone1, string Telefone2, string RG, decimal SalarioHora)
        { 
            Funcionario funcionario = new Funcionario();
            funcionario.IdDepartamento = IdDepartamento;
            funcionario.Nome = Nome;
            funcionario.CPF = CPF;
            funcionario.Endereco = Endereco;
            funcionario.Cidade = Cidade;
            funcionario.Estado = Estado;
            funcionario.Telefone1 = Telefone1;
            funcionario.Telefone2 = Telefone2;
            funcionario.RG = RG;
            funcionario.SalarioHora = SalarioHora;
            funcionario.TipoFuncionario = 0;
            funcionario.DataCadastro = DateTime.Now;
            funcionario.Ativo = true;

            var context = new DataClasses1DataContext();
            context.Funcionarios.InsertOnSubmit(funcionario);
            context.SubmitChanges();
            return funcionario;
        }

        //Cadastro do fisioterapeuta, TIPO 1
        public Funcionario CadastrarFisioterapeuta(int IdDepartamento, string Nome, string CPF, string Endereco, string Cidade, string Estado, string Telefone1, string Telefone2, string RG, decimal SalarioHora)
        {
            Funcionario funcionario = new Funcionario();
            funcionario.IdDepartamento = IdDepartamento;
            funcionario.Nome = Nome;
            funcionario.CPF = CPF;
            funcionario.Endereco = Endereco;
            funcionario.Cidade = Cidade;
            funcionario.Estado = Estado;
            funcionario.Telefone1 = Telefone1;
            funcionario.Telefone2 = Telefone2;
            funcionario.RG = RG;
            funcionario.SalarioHora = SalarioHora;
            funcionario.TipoFuncionario = 1;
            funcionario.DataCadastro = DateTime.Now;
            funcionario.Ativo = true;

            var context = new DataClasses1DataContext();
            context.Funcionarios.InsertOnSubmit(funcionario);
            context.SubmitChanges();

            return funcionario;
        }

        //Cadastro de outros funcionários, TIPO 2
        public Funcionario CadastrarOutrosFuncionarios(int IdDepartamento, string Nome, string CPF, string Endereco, string Cidade, string Estado, string Telefone1, string Telefone2, string RG, decimal SalarioHora)
        {
            Funcionario funcionario = new Funcionario();
            funcionario.IdDepartamento = IdDepartamento;
            funcionario.Nome = Nome;
            funcionario.CPF = CPF;
            funcionario.Endereco = Endereco;
            funcionario.Cidade = Cidade;
            funcionario.Estado = Estado;
            funcionario.Telefone1 = Telefone1;
            funcionario.Telefone2 = Telefone2;
            funcionario.RG = RG;
            funcionario.SalarioHora = SalarioHora;
            funcionario.TipoFuncionario = 2;
            funcionario.DataCadastro = DateTime.Now;
            funcionario.Ativo = true;

            var context = new DataClasses1DataContext();
            context.Funcionarios.InsertOnSubmit(funcionario);
            context.SubmitChanges();

            return funcionario;
        }

        //Atualiza Funcionario
        public void AtualizaFuncionario(int IdFuncionario, int IdDepartamento, string Nome, string CPF, string Endereco, string Cidade, string Estado, string Telefone1, string Telefone2, string RG, decimal SalarioHora, string AtendimentoPaciente)
        {
            var context = new DataClasses1DataContext();
            Funcionario funcionario = (from f in context.Funcionarios
                         where f.Id == IdFuncionario
                         select f).Single();

            funcionario.IdDepartamento = IdDepartamento;
            funcionario.Nome = Nome;
            funcionario.CPF = CPF;
            funcionario.Endereco = Endereco;
            funcionario.Cidade = Cidade;
            funcionario.Estado = Estado;
            funcionario.Telefone1 = Telefone1;
            funcionario.Telefone2 = Telefone2;
            funcionario.RG = RG;
            funcionario.SalarioHora = SalarioHora;
            funcionario.AtendimentoPaciente = AtendimentoPaciente;

            context.SubmitChanges();
        }

        //get funcionario
        public Funcionario GetFuncionario(int IdFuncionario)
        {
            var context = new DataClasses1DataContext();
            Funcionario funcionario = (from f in context.Funcionarios
                                       where f.Id == IdFuncionario
                                       select f).Single();

            return funcionario;
        }

        //desativa funcionario
        public void DesativaFuncionario(int IdFuncionario)
        {
            var context = new DataClasses1DataContext();
            Funcionario funcionario = (from f in context.Funcionarios
                                       where f.Id == IdFuncionario
                                       select f).Single();
            funcionario.Ativo = false;
            context.SubmitChanges();
        }

        //lista funcionarios por tipo (0 = medico, 1 = fisioterapeuta, 2 = outros funcionarios)
        //parametro = 1 - lista funcionários ativos
        //parametro = 0 - lista funcionários nao ativos
        // parametro = null - lista todos os funcionarios
        public List<Funcionario> ListaFuncionarios(int tipoFuncionario, int parametro)
        {
            var context = new DataClasses1DataContext();
            List<Funcionario> listaFuncionarios = new List<Funcionario>();

            if (tipoFuncionario == 0) //médico
            {
                if (parametro == 1)
                {
                    listaFuncionarios = (from f in context.Funcionarios
                                         where (f.Ativo == true && f.TipoFuncionario == 0)
                                         select f).ToList();
                }
                else if (parametro == 0)
                {
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.Ativo == false && f.TipoFuncionario == 0
                                         select f).ToList();
                }
                else //lista todos médicos (ativos e inativos)
                {
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.TipoFuncionario == 0
                                         select f).ToList();
                }
            }
            else if (tipoFuncionario == 1) //fisioterapeuta
            {
                if (parametro == 1)
                {
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.Ativo == true && f.TipoFuncionario == 1
                                         select f).ToList();
                }
                else if (parametro == 0)
                {
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.Ativo == false && f.TipoFuncionario == 1
                                         select f).ToList();
                }
                else //lista todos fisioterapeutas (ativos e inativos)
                {
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.TipoFuncionario == 1
                                         select f).ToList();
                }
            }
            else if (tipoFuncionario == 2) //outros
            {
                if (parametro == 1)
                {
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.Ativo == true && f.TipoFuncionario == 2
                                         select f).ToList();
                }
                else if (parametro == 0)
                {
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.Ativo == false && f.TipoFuncionario == 2
                                         select f).ToList();
                }
                else //lista todos os outros funcionarios (ativos e inativos)
                {
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.TipoFuncionario == 2
                                         select f).ToList();
                }
            }
            else
            {
                if (parametro == 1)
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.Ativo == true
                                         select f).ToList();
                else if (parametro == 0)
                    listaFuncionarios = (from f in context.Funcionarios
                                         where f.Ativo == false
                                         select f).ToList();
                else
                    listaFuncionarios = (from f in context.Funcionarios
                                         select f).ToList();
            }

            return listaFuncionarios;
        }

        public List<Funcionario> ListaFuncionarios(string nome)
        {
            var ctx = new DataClasses1DataContext();
            var qry = from f in ctx.Funcionarios
                      where f.Nome.Contains(nome)
                      select f;
            return qry.ToList();
        }
    }
}
